// 定义一种组合类型的方式： 联合类型
type WhyType = number | string
type Direction = "left" | "right" | "center"

// 另外一种组合类型的方式，交叉类型
// 但是这样写法是没有什么意义的，因为没有一个类型既是number类型，又是string类型
// 鼠标放到WType上可以发现是一个never类型
type WType = number & string
// 但是这种交叉类型可以帮助我们实现接口的组合

interface Iswm {
  swimming: () => void
}

interface Ifly {
  flying: () => void
}

type obj1 = Iswm | Ifly
type obj2 = Iswm & Ifly

// 使用obj1 的时候我们发现只要满足 Iswm 或者 Ifly中一个即可
const action: obj1 = {
  swimming() {

  }
}
// 使用obj2 的时候我们发现必须两个全部满足
const action2: obj2 = {
  swimming() { },
  flying() { }
}


// 实现接口的组合的方式有两种：
// 1. 使用接口继承
// 2. 使用交叉类型 &
export { }